<div class="status-article-compose-box">
  <ComposeBox realm={originalStatusId}
              autoFocus="true"
              hideBottomBorder="true"
              isReply="true"
              replyVisibility={visibility}
              replySpoiler={spoilerText}
              inReplyToUuid={uuid}
  />
</div>
<style>
  .status-article-compose-box {
    grid-area: compose;
    max-width: 100%;
  }
</style>
<script>
  import ComposeBox from '../compose/ComposeBox.html'
  import { store } from '../../_store/store.js'
  import { debounce, throttle } from '../../_thirdparty/lodash/timers.js'
  import { on } from '../../_utils/eventBus.js'
  import { observe } from 'svelte-extras'

  const DEBOUNCE_DELAY = 400
  const THROTTLE_DELAY = 150

  export default {
    oncreate () {
      on('postedStatus', this, this.onPostedStatus)
      this.setupRecalculateHeightListener()
    },
    store: () => store,
    computed: {
      composeData: ({ $currentComposeData, originalStatusId }) => $currentComposeData[originalStatusId] || {}
    },
    methods: {
      observe,
      onPostedStatus (realm) {
        const { originalStatusId } = this.get()
        if (realm !== originalStatusId) {
          return
        }
        requestAnimationFrame(() => {
          const { uuid } = this.get()
          const { repliesShown } = this.store.get()
          repliesShown[uuid] = false
          this.store.set({ repliesShown })
          this.fire('recalculateHeight')
        })
      },
      setupRecalculateHeightListener () {
        const recalc = () => requestAnimationFrame(() => this.fire('recalculateHeight'))
        // debounce AND throttle due to 333ms content warning animation
        const debounced = debounce(recalc, DEBOUNCE_DELAY)
        const throttled = throttle(() => {
          debounced()
          recalc()
        }, THROTTLE_DELAY, {
          leading: true,
          trailing: true
        })
        this.observe('composeData', throttled)
      }
    },
    components: {
      ComposeBox
    }
  }
</script>
